package com.xunk.system.mapper;

import com.xunk.system.api.domain.SysDept;
import com.xunk.system.api.domain.SysHome;
import com.xunk.system.api.domain.SysUser;
import com.xunk.system.domain.SysHomeResponse;
import com.xunk.system.domain.SysUserHome;
import com.xunk.system.entity.HomeDO;
import com.xunk.system.vo.EquipmentVO;
import com.xunk.system.vo.HomeManagerResponseVO;
import com.xunk.system.vo.SysUserRoughInfo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 家庭房屋信息Mapper接口
 *
 * @author ruoyi
 * @date 2021-03-10
 */
public interface SysHomeMapper {
    /**
     * 查询家庭房屋信息
     *
     * @param homeId 家庭房屋信息ID
     * @return 家庭房屋信息
     */
    public SysHome selectSysHomeById(Long homeId);

    public List<SysHome> selectSysHomeByCode(String invitecode);

    /**
     * 查询家庭房屋信息列表
     *
     * @param sysHome 家庭房屋信息
     * @return 家庭房屋信息集合
     */
    public List<SysHomeResponse> selectSysHomeList(SysHome sysHome);

    /**
     * 新增家庭房屋信息
     *
     * @param sysHome 家庭房屋信息
     * @return 结果
     */
    public int insertSysHome(SysHome sysHome);

    /**
     * 修改家庭房屋信息
     *
     * @param sysHome 家庭房屋信息
     * @return 结果
     */
    public int updateSysHome(SysHome sysHome);

    /**
     * 删除家庭房屋信息
     *
     * @param homeId 家庭房屋信息ID
     * @return 结果
     */
    public int deleteSysHomeById(Long homeId);

    /**
     * 批量删除家庭房屋信息
     *
     * @param homeIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteSysHomeByIds(Long[] homeIds);

    /**
     *  根据房屋id来查询该家庭下的所有成员信息
     * @param homeId 家庭id
     * @return 结果
     */
    List<SysUser> selectHomeMemberByHomeId(Long homeId);

    /**
     *  将某成员从家庭里删除
     * @param userId 用户id
     * @param homeId 家庭id
     * @return 结果
     */
    int removeUserFromHome(@Param("userId") Long userId, @Param("homeId") Long homeId);

    /**
     * 查询对应的家庭的房主人数
     *
     * @param homeId
     * @return
     */
    long countHomeMaster(@Param("homeId") Long homeId);

    /**
     * 插入用户和家庭关系
     *
     * @param userId
     * @param homeId
     */
    void insertUserHomeRelation(@Param("userId") Long userId, @Param("homeId") Long homeId, @Param("isMaster") Integer isMaster);

    void invalidHomeInviteCodeByHomeId(@Param("homeId") Long homeId);

    int selectIsHomeMaster(@Param("userId") Long userId, @Param("homeId") Long homeId);

    void updateHomeRole(@Param("userId") Long userId, @Param("homeId") Long homeId, @Param("isMaster") Integer isMaster);

    List<SysUserHome> listUserHome(@Param("userId") Long userId);

    List<HomeDO> listHome(@Param("homeIds") List<Long> homeIds);

    String selectOwnerIdFromDeptByDeptId(@Param("deptId") Long deptId);

    Long checkHomeMemeber(@Param("homeId") Long homeId, @Param("userId") Long userId);

    List<EquipmentVO> selectDeviceByScene(@Param("homeId") Long homeId, @Param("mode") String mode);

    SysDept selectDeptById(Long deptId);

    int insertDept(SysDept dept);

    SysUser selectUserByUserId(@Param("userId") Long userId);

    Long selectSysHomeByAddress(@Param("address") String address);

    List<HomeManagerResponseVO> selectHomeListInfoByUserId(@Param("userId") Long userId);

    List<SysUserRoughInfo> selectUsersByHomeId(@Param("homeId") Long homeId);

    SysUserRoughInfo selectMasterByHomeId(@Param("homeId") Long homeId);

    SysHome selectSysHomeByOwnerId(String qrCode);
}
